home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib06.dsk
/
APPLE FINANCIER - PART IV.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
17KB
|
333 lines
100 REM *****************************
101 REM * APPLE FINANCIER - IV *
102 REM * BY LARRY ABRAMS *
103 REM * COPYRIGHT (C) 1981 *
104 REM * BY MICRO-SPARC INC *
105 REM * LINCOLN, MA. 01773 *
106 REM * (MODS 900, 5000 NEW) *
107 REM *****************************
110 :
200 REM MENU
201 ONERR GOTO 500
202 HOME : VTAB 2: HTAB 12: INVERSE : PRINT " SELECT ONE OF THE FOLLOWING ": NORMAL : GOSUB 400
204 G$ = CHR$(7)
210 PRINT TAB( 9)"STRAIGHT LINE DEPRECIATION <1>"
220 PRINT TAB( 3)"VAR RATE - DECL BAL DEPRECIATION <2>"
230 PRINT TAB( 12);"ACCRUED SIMPLE INTEREST <3>"
240 PRINT TAB( 18);"COMPOUND INTEREST <4>"
250 PRINT TAB( 10);"UNEARNED INTEREST REBATES <5>"
280 PRINT TAB( 14)"DIRECT REDUCTION LOAN <8>"
290 PRINT TAB( 14);"AMORTIZATION SCHEDULE <9>"
292 GOSUB 400: PRINT TAB( 24);"<RETURN> TO QUIT":VT = PEEK(37) +2
293 HT = 30: VTAB VT: HTAB HT: CALL -868: PRINT "WHICH":HT = 38:LS = 1: GOSUB 902:ANS = VAL(CS$): IF LEN(CS$) = 0 THEN END
295 IF STR$(ANS) < >CS$ OR ANS = 0 THEN PRINT G$;: GOTO 293
296 ON ANS GOTO 1000,2000,3000,4000,5000,6000,7000,8000,9000
298 :
300 REM PRINT USING
302 P$ = STR$( INT((P +.005) *100))
304 IF LEN(P$) <3 THEN P$ = LEFT$("000",(3 - LEN(P$))) +P$
305 PP$ = LEFT$(P$,( LEN(P$) -2))
306 IF DP = 0 THEN P$ = PP$: GOTO 308
307 P$ = PP$ +"." + RIGHT$(P$,DP)
308 P$ = RIGHT$(" " +P$,PL)
310 RETURN
312 :
400 FOR DOT = 0 TO 39: PRINT ".";: NEXT DOT: RETURN
402 :
500 REM ERROR HANDLING ROUTINE
502 HOME : VTAB 5: INVERSE : PRINT "CHECK APPLESOFT MANUAL PG 136 FOR ERR": NORMAL
504 PRINT : PRINT "ERROR IS NUMBER "; PEEK(222): PRINT "LOCATED IN LINE "; PEEK(218) + PEEK(219) *256: POKE 34,0: END
505 :
600 REM DAYS BETWEEN DATES
602 HOME : VTAB 5:A(4) = 0: PRINT "BEGINNING DATE ";: GOSUB 606:A(4) = ND: PRINT
604 PRINT " ENDING DATE ";: GOSUB 606:A(4) = ND -A(4): RETURN
606 PRINT CHR$(91);"YY"; CHR$(93);"YY.MMDD: ";: INPUT "";DTE
608 YRS = INT(DTE):MOS = INT((DTE -YRS) *100):DAYS = INT((DTE -YRS -MOS/100) *1E4 +.5)
610 YRS = YRS -1900 *(YRS >99)
612 REM ACTUAL DAYS (365)
613 YY = YRS -(MOS < = 2)
614 LD = INT(.4 *MOS +2.3) *(MOS >2)
616 ND = 365 *YRS +31 *(MOS -1) +DAYS + INT(YY/4) -LD: RETURN
618 :
620 REM BANKING YEAR (360)
622 LD = DAYS
624 IF DAYS < >31 THEN 630
626 IF A(4) >0 AND PDAYS <30 THEN 630
628 LD = 30
630 ND = 360 *YRS +30 *MOS +LD:PDAYS = DAYS: RETURN
900 REM DATA INPUT
901 FOR I = 0 TO LS:NS$(I) = " ": NEXT I:CS$ = ""
902 FOR I = 0 TO LS
904 VTAB VT: HTAB HT +I: GET NS$: IF NS$ = CHR$(13) THEN NS$(I) = "": GOTO 930
906 IF NS$ = CHR$(8) OR NS$ = CHR$(21) THEN 910
908 IF NS$ = CHR$(44) OR NS$ = CHR$(58) OR ASC(NS$) <32 THEN PRINT G$;: GOTO 904
910 IF NS$ = CHR$(8) AND I = 0 THEN 904
912 IF NS$ = CHR$(8) THEN I = I -1: GOTO 904
913 IF NS$ = CHR$(21) AND I <LS THEN I = I +1: GOTO 904
914 IF I = LS AND NS$ < > CHR$(13) THEN PRINT G$;: GOTO 904
916 NS$(I) = NS$: VTAB VT: HTAB HT +I:: PRINT NS$(I): NEXT I
930 AL = I:I = LS: NEXT I:CS$ = ""
932 FOR I = 0 TO AL -1:CS$ = CS$ +NS$(I): NEXT I
934 IF CS$ = CHR$(13) OR CS$ = "" THEN VTAB VT: HTAB HT: PRINT SPC( LS): GOTO 938
936 VTAB VT: HTAB HT: PRINT CS$; SPC( LS - LEN(CS$))
938 PRINT : RETURN
940 :
1000 REM STRAIGHT LINE DEPRECIATION
1002 :
1004 REM PROGRAM INSTRUCTIONS
1006 CLEAR :DP = 0:G$ = CHR$(7): HOME : VTAB 10
1008 PRINT "INSTRUCTIONS? ";: POKE -16368,0: GET ANS$: IF LEFT$(ANS$,1) < >"Y" THEN HOME : VTAB 10: GOTO 1102
1010 HOME : VTAB 5: PRINT " STRAIGHT LINE DEPRECIATION SCHEDULE": GOSUB 400
1012 PRINT "THE ANNUAL DEPRECIATION ALLOWANCE USING"
1014 PRINT "THIS METHOD IS DETERMINED BY DIVIDING"
1016 PRINT "THE COST (STARTING BOOK VALUE) LESS ITS"
1018 PRINT "ESTIMATED SALVAGE VALUE BY ITS USEFUL"
1020 PRINT "LIFE EXPECTANCY. THAT IS:": PRINT
1022 INVERSE : PRINT " DEPRECIATION ";: NORMAL : PRINT "=": PRINT
1024 PRINT "(START BK VAL - SALVAGE VAL) / (LIFE)": PRINT
1026 :
1100 REM INPUT STARTING,SALVAGE,LIFE
1102 PRINT "1. STARTING BOOK VALUE ";: IF FLAG THEN PRINT A(1): GOTO 1106
1104 INPUT A(1)
1106 PRINT "2. SALVAGE VALUE"; TAB( 24);: IF FLAG THEN PRINT A(2): GOTO 1110
1108 INPUT A(2)
1110 PRINT "3. LIFE EXPECTANCY"; TAB( 24);: IF FLAG THEN PRINT A(3): GOTO 1114
1112 INPUT A(3):FLAG = 1
1114 PRINT : PRINT "ANY CHANGES? ";: POKE -16368,0: GET ANS$: PRINT ANS$: IF LEFT$(ANS$,1) = "N" THEN 1118
1116 PRINT : INPUT "WHICH ONE? ";W: PRINT "CHANGE PART ";W;" TO: ";: INPUT A(W): HOME : VTAB 10: GOTO 1102
1118 BKVLUE = A(1):SALVAGE = A(2):LFE = A(3)
1120 PRINT : PRINT "DISPLAY ENTIRE SCHEDULE? ";: POKE -16368,0: GET ANS$: PRINT ANS$
1122 IF LEFT$(ANS$,1) = "Y" THEN I = 0: GOTO 1202
1124 PRINT "WHICH YEARS (START,END)";: INPUT I,J
1126 :
1200 REM OUTPUT HEADINGS
1202 HOME : PRINT TAB( 5);"DEPR"; TAB( 14);"REMAIN"; TAB( 25);"REMAIN"; TAB( 35);"TOTAL"
1204 PRINT "YR"; TAB( 4);"AMOUNT"; TAB( 12);"DEPR VALUE"; TAB( 23);"BOOK VALUE"; TAB( 35);"DEPREC";
1206 GOSUB 400: POKE 34,3
1208 :
1300 REM CALCULATIONS/OUTPUT
1302 IF NOT I THEN I = 1:J = LFE
1304 IF J >LFE THEN J = LFE
1306 FOR K = I TO J
1308 DEP = (BKVLUE -SALVAGE)/LFE:TDEP = K *DEP:RDV = (LFE -K) *DEP:RBV = RDV +SALVAGE
1310 PRINT SPC( 1 -(K >9));K; TAB( 4);:PL = 7:P = DEP: GOSUB 300: PRINT P$;:PL = 10:P = RDV: GOSUB 300: PRINT P$;:P = RBV: GOSUB 300: PRINT P$;:P = TDEP: GOSUB 300: PRINT P$;: REM
1312 NEXT K
1314 :
1400 REM PROGRAM ENDING
1402 PRINT : VTAB 24: POKE 34,0
1404 PRINT "ANOTHER RUN? ";: POKE -16368,0: GET ANS$: PRINT ANS$: IF LEFT$(ANS$,1) = "Y" THEN HOME : VTAB 12: GOTO 1102
1406 GOTO 200: REM RETURN TO MENU
1408 :
2000 REM VARIABLE RATE - DECLINING BALANCE DEPRECIATION
2002 :
2004 REM PROGRAM INSTRUCTIONS
2006 CLEAR :DP = 0:G$ = CHR$(7): HOME : VTAB 10
2008 PRINT "INSTRUCTIONS? ";: POKE -16368,0: GET ANS$: IF LEFT$(ANS$,1) < >"Y" THEN HOME : VTAB 10: GOTO 2102
2010 HOME : VTAB 2: PRINT TAB( 4)"VARIABLE RATE - DECLINING BALANCE": PRINT TAB( 10)"DEPRECIATION SCHEDULE": GOSUB 400
2012 PRINT "THIS METHOD PROVIDES FOR MORE DEPRECIA-": PRINT "TION IN EARLIER YEARS AND DECREASING": PRINT "DEPRECIATION IN LATER YEARS."
2014 PRINT "THE VARIABLE RATE IS A FACTOR (E.G. 1.5": PRINT "OR 1.25) THAT'S THE SAME AS A DECLINING BALANCE PERCENTAGE."
2016 PRINT
2018 PRINT "THIS SCHEDULE WILL ALSO GIVE THE CROSS-": PRINT "OVER POINT (HI-LIGHTED), WHERE THE": PRINT "SWITCH FROM THIS METHOD TO THE STRAIGHT"
2020 PRINT "LINE METHOD SHOULD BE MADE. AT THIS": PRINT "POINT, STRAIGHT LINE DEPRECIATION IS"
2022 PRINT "GREATER THAN THAT BY THE DECLINING": PRINT "BALANCE METHOD."
2024 PRINT
2026 :
2100 REM INPUT STARTING,SALVAGE,LIFE,FACT
2102 PRINT "1. STARTING BOOK VALUE ";: IF FLAG THEN PRINT A(1): GOTO 2106
2104 INPUT A(1)
2106 PRINT "2. SALVAGE VALUE"; TAB( 24);: IF FLAG THEN PRINT A(2): GOTO 2110
2108 INPUT A(2)
2110 PRINT "3. LIFE EXPECTANCY"; TAB( 24);: IF FLAG THEN PRINT A(3): GOTO 2114
2112 INPUT A(3)
2114 PRINT "4. RATE FACTOR"; TAB( 24);: IF FLAG THEN PRINT A(4): GOTO 2118
2116 INPUT A(4):FLAG = 1
2118 PRINT : PRINT "ANY CHANGES? ";: POKE -16368,0: GET ANS$: PRINT ANS$: IF LEFT$(ANS$,1) = "N" THEN 2122
2120 PRINT : INPUT "WHICH ONE? ";W: PRINT "CHANGE PART ";W;" TO: ";: INPUT A(W): HOME : VTAB 10: GOTO 2102
2122 BKVLUE = A(1):SALVAGE = A(2):LFE = A(3):FACT = A(4)
2124 PRINT : PRINT "DISPLAY ENTIRE SCHEDULE?";: POKE -16368,0: GET ANS$: PRINT ANS$
2126 IF LEFT$(ANS$,1) = "Y" THEN I = 0: GOTO 2202
2128 PRINT "WHICH YEARS (START,END)";: INPUT I,J
2130 :
2200 REM OUTPUT HEADING
2202 HOME : PRINT TAB( 5);"DEPR"; TAB( 14);"REMAIN"; TAB( 25);"REMAIN"; TAB( 35);"TOTAL"
2204 PRINT "YR"; TAB( 4);"AMOUNT"; TAB( 12);"DEPR VALUE"; TAB( 23);"BOOK VALUE"; TAB( 35);"DEPREC"
2206 GOSUB 400: POKE 34,3
2208 :
2300 REM CALCULATION/OUTPUT
2302 IF NOT I THEN I = 1:J = LFE
2304 IF J >LFE THEN J = LFE
2306 FOR K = 1 TO J
2308 DEP = (1 -FACT/LFE) ^(K -1) *(FACT/LFE) *BKVLUE:TDEP = (1 -((1 -FACT/LFE) ^(K))) *BKVLUE
2310 RDV = BKVLUE -SALVAGE -TDEP:RBV = RDV +SALVAGE
2312 IF (LFE -K) *DEP <RDV THEN INVERSE
2314 PRINT SPC( 1 -(K >9));K; TAB( 4);:PL = 7:P = DEP: GOSUB 300: PRINT P$;:PL = 10:P = RDV: GOSUB 300: PRINT P$;:P = RBV: GOSUB 300: PRINT P$;:P = TDEP: GOSUB 300: PRINT P$;: REM
2316 NEXT K: NORMAL
2318 :
2400 REM PROGRAM ENDING
2402 PRINT : VTAB 24: POKE 34,0
2404 PRINT "ANOTHER RUN? ";: POKE -16368,0: GET ANS$: PRINT ANS$: IF LEFT$(ANS$,1) = "Y" THEN HOME : VTAB 12: GOTO 2102
2406 GOTO 200: REM RETURN TO MENU
2408 :
3000 REM ACCRUED INTEREST
3002 CLEAR :DP = 2:G$ = CHR$(7)
3004 HOME : VTAB 5: PRINT "ENTER A ZERO FOR ITEM TO CALCULATE:": PRINT
3006 PRINT "1. BEGINNING AMOUNT"; TAB( 28);: IF FLAG THEN PRINT A(1): GOTO 3010
3008 INPUT A(1)
3010 PRINT "2. ANNUAL INTEREST RATE %"; TAB( 28);: IF FLAG THEN PRINT A(2): GOTO 3014
3012 INPUT A(2)
3014 PRINT "3. FUTURE AMOUNT"; TAB( 28);: IF FLAG THEN PRINT A(3): GOTO 3022
3016 INPUT A(3)
3018 FLAG = 0: VTAB 10: CALL -958: PRINT : PRINT "DO YOU WISH TO CALCULATE THE NUMBER": INPUT "OF DAYS BETWEEN TWO DATES? ";ANS$
3020 IF LEFT$(ANS$,1) = "Y" THEN FLAG = 1: GOSUB 600: GOTO 3004
3022 VTAB 10: CALL -958: PRINT "4. NUMBER OF DAYS"; TAB( 28);: IF FLAG THEN PRINT A(4): GOTO 3026
3024 INPUT A(4):FLAG = 1
3026 VTAB 15: INVERSE : PRINT " TYPE 'END' TO RETURN TO MENU ": NORMAL : PRINT : INPUT "ANY CHANGES? ";ANS$
3028 IF LEFT$(ANS$,1) = "N" THEN 3102
3030 IF LEFT$(ANS$,1) = "E" THEN 200
3032 INPUT "WHICH PART? ";W: IF W = 4 THEN 3018
3034 PRINT "CHANGE PART ";W;" TO: ";: INPUT A(W): GOTO 3004
3036 :
3100 REM CALCULATION SECTION
3102 IF A(1) = 0 THEN A(1) = A(3)/(1 +(A(2)/36500 *A(4))):A(1) = INT(A(1) *100 +.5)/100
3104 IF A(2) = 0 THEN A(2) = (A(3) -A(1)) *36500/(A(1) *A(4)):A(2) = INT(A(2) *100 +.5)/100
3106 IF A(3) = 0 THEN A(3) = A(2)/36500 *A(1) *A(4):A(3) = INT((A(1) +A(3)) *100 +.5)/100
3108 IF A(4) = 0 THEN A(4) = (A(3) -A(1))/(A(1) *A(2)/36500):A(4) = INT(A(4) +.5)
3110 GOTO 3004
3112 :
4000 REM COMPOUND INTEREST SECTION
4002 CLEAR :G$ = CHR$(7)
4004 HOME : VTAB 5: PRINT "1. AMOUNT TO BE COMPOUNDED"; TAB( 30);: IF FLAG THEN PRINT A(1): GOTO 4008
4006 INPUT A(1)
4008 PRINT "2. YRLY INTEREST RATE (MAX)"; TAB( 30);: IF FLAG THEN PRINT A(2): GOTO 4012
4010 INPUT A(2)
4012 PRINT "3. CHANGE IN INTEREST RATE"; TAB( 30);: IF FLAG THEN PRINT A(3): GOTO 4020
4014 INPUT A(3)
4016 FLAG = 0: VTAB 8: CALL -958: PRINT : PRINT "DO YOU WISH TO CALCULATE THE NUMBER": INPUT "OF DAYS BETWEEN TWO DATES? ";ANS$
4018 IF LEFT$(ANS$,1) = "Y" THEN FLAG = 1: GOSUB 600: GOTO 4004
4020 VTAB 8: CALL -958: PRINT "4. NUMBER OF DAYS"; TAB( 30);: IF FLAG THEN PRINT A(4): GOTO 4024
4022 INPUT A(4):FLAG = 1
4024 VTAB 15: INVERSE : PRINT " TYPE 'END' TO RETURN TO MENU ": NORMAL : PRINT : INPUT "ANY CHANGES? ";ANS$
4026 IF LEFT$(ANS$,1) = "N" THEN 4034
4028 IF LEFT$(ANS$,1) = "E" THEN 200
4030 INPUT "WHICH PART? ";W: IF W = 4 THEN 4016
4032 PRINT "CHANGE PART ";W;" TO: ";: INPUT A(W): GOTO 4004
4034 AMT = A(1):IR = A(2):IC = A(3):DAYS = A(4)
4036 CP(1) = 360:CP(2) = 365:CP(3) = 12:CP(4) = 4
4038 :
4100 REM OUTPUT HEADINGS
4102 HOME : VTAB 2: INVERSE : PRINT " COMPOUNDING $";AMT;" FOR ";DAYS;" DAYS. ": NORMAL : PRINT
4104 PRINT "PCNT"; TAB( 7);"360 DAY"; TAB( 16);"365 DAY"; TAB( 26);"MONTH"; TAB( 34);"QUARTER";
4106 GOSUB 400: PRINT
4108 :
4200 REM CALCULATIONS/OUTPUT
4202 PL = 4:DP = 0:P = IR *100: GOSUB 300: PRINT P$;
4204 FOR X = 1 TO 4
4206 I = IR/(CP(X) *100)
4208 TIME = INT(DAYS/ INT(365/CP(X)))
4210 FUTAMT = AMT *(1 +I) ^TIME
4212 PL = 9:DP = 2:P = FUTAMT
4214 GOSUB 300: PRINT P$;
4216 NEXT X
4218 :
4220 REM TEST FOR PROGRAM END
4222 IR = IR -IC: IF PEEK(37) <21 AND IR >0 THEN 4202
4224 VTAB 24: HTAB 26: PRINT "PRESS ANY KEY ";: CALL -756: GOTO 4004
4226 :
5000 REM UNEARNED INTEREST REBATE (RULE OF 78'S)
5002 CLEAR :DP = 2:G$ = CHR$(7)
5004 HOME : VTAB 5: PRINT "1. TOTAL NUMBER OF PAYMENTS"; TAB( 30);: IF FLAG THEN PRINT A(1): GOTO 5008
5006 VT = 5:HT = 30:LS = 2: VTAB VT: HTAB HT: CALL -868: GOSUB 900:A(1) = VAL(CS$): IF A(1) = 0 OR STR$(A(1)) < >CS$ THEN PRINT G$;: GOTO 5006
5008 PRINT "2. MONTHLY PAYMENT AMOUNT"; TAB( 30);: IF FLAG THEN PRINT A(2): GOTO 5012
5010 VT = 6:HT = 30:LS = 6: VTAB VT: HTAB HT: CALL -868: GOSUB 900:A(2) = VAL(CS$): IF A(2) = 0 OR STR$(A(2)) < >CS$ THEN PRINT G$;: GOTO 5010
5012 PRINT "3. TOTAL FINANCE CHARGE"; TAB( 30);: IF FLAG THEN PRINT A(3): GOTO 5016
5014 VT = 7:HT = 30: VTAB VT: HTAB HT: CALL -868: GOSUB 900:A(3) = VAL(CS$): IF A(3) = 0 OR STR$(A(3)) < >CS$ THEN PRINT G$;: GOTO 5014
5016 PRINT "4. NUMBER OF PAYMENTS MADE"; TAB( 30);: IF FLAG THEN PRINT A(4): GOTO 5020
5018 VT = 8:HT = 30: VTAB VT: HTAB HT: CALL -868:LS = 2: GOSUB 900:A(4) = VAL(CS$):FLAG = 1: IF STR$(A(4)) < >CS$ THEN PRINT G$;: GOTO 5018
5020 VTAB 15: INVERSE : PRINT " TYPE 'END' TO RETURN TO MENU ": NORMAL
5022 VTAB 17: HTAB 1: PRINT "ANY CHANGES?":VT = 17:HT = 14: VTAB VT: HTAB HT: CALL -868:LS = 3: GOSUB 900: IF CS$ < >"Y" AND CS$ < >"N" AND LEFT$(CS$,1) < >"E" THEN PRINT G$;: GOTO 5022
5024 CS$ = LEFT$(CS$,1): IF CS$ = "E" THEN 200
5026 IF CS$ = "N" THEN 5034
5028 VTAB 18: HTAB 1: PRINT "WHICH ONE?":VT = 18:HT = 12: VTAB VT: HTAB HT: CALL -868:LS = 1: GOSUB 900:W = VAL(CS$): IF STR$(W) < >CS$ OR W <1 OR W >4 THEN PRINT G$;: GOTO 5028
5030 VTAB 19: HTAB 1: PRINT "CHANGE PART ";W;" TO:":VT = 19:HT = 19: VTAB VT: HTAB HT: CALL -868:LS = 6 -4 *(W = 1 OR W = 4): GOSUB 900:A(W) = VAL(CS$): IF STR$(A(W)) < >CS$ THEN PRINT G$;: GOTO 5030
5032 GOTO 5004
5034 NP = A(1):PMT = A(2):FC = A(3):NMADE = A(4)
5036 :
5100 REM OUTPUT HEADING SECTION
5102 HOME : PRINT "PAYMENT"; TAB( 11);"REMAIN"; TAB( 22);"REBATE"; TAB( 33);"TOTAL"
5104 PRINT "NUMBER"; TAB( 11);"BALANCE"; TAB( 22);"AMOUNT"; TAB( 32);"INTEREST"
5106 GOSUB 400
5108 :
5200 REM CALCULATION/OUTPUT
5202 FOR I = NMADE TO NP
5204 J = NP -I
5206 REBTE = ((J *FC) *(J +1))/(NP *(NP +1))
5208 BAL = (J *PMT) -REBTE
5210 PRINT SPC( 3 -(I >9));I;:PL = 7:P = BAL: GOSUB 300: PRINT TAB( 10);P$;:P = REBTE: GOSUB 300: PRINT TAB( 21);P$;:P = FC -REBTE: GOSUB 300: PRINT TAB( 32);P$
5212 :
5300 REM PROGRAM ENDING
5302 IF PEEK(37) <22 AND J >0 THEN NEXT I
5304 VTAB 24: HTAB 26: PRINT "PRESS ANY KEY ";: CALL -756: GOTO 5004
5306 :
8000 REM DIRECT REDUCTION LOAN
8002 :
8004 REM PGM INITIALIZATION
8006 CLEAR :DP = 2:G$ = CHR$(7)
8007 :
8100 REM MENU / INPUT SECTION
8102 HOME : VTAB 5
8104 PRINT "1. MAX BORROW AMOUNT"; TAB( 25);: IF FLAG THEN PRINT A(1): GOTO 8108
8106 INPUT A(1)
8108 PRINT "2. CHANGE IN AMOUNT"; TAB( 25);: IF FLAG THEN PRINT A(2): GOTO 8112
8110 INPUT A(2)
8112 PRINT "3. MAX INTEREST RATE"; TAB( 25);: IF FLAG THEN PRINT A(3): GOTO 8116
8114 INPUT A(3)
8116 PRINT "4. CHANGE IN INT RATE"; TAB( 25);: IF FLAG THEN PRINT A(4): GOTO 8120
8118 INPUT A(4)
8120 PRINT "5. LOAN TERM (MONTHS)"; TAB( 25);: IF FLAG THEN PRINT A(5): GOTO 8124
8122 INPUT A(5):FLAG = 1
8124 PRINT : INVERSE : PRINT "TYPE 'END' TO RETURN TO MENU ": NORMAL : VTAB 18: INPUT "ANY CHANGES? ";Y$
8126 IF LEFT$(Y$,1) = "N" THEN 8146
8128 IF Y$ = "END" THEN 200
8130 INPUT "WHICH ONE? ";W: PRINT "CHANGE PART ";W;" TO ";: INPUT A(W): GOTO 8102
8132 :
8134 REM PAYMENT CALCULATION
8136 I = J/1200
8138 PMT = (K *I)/(1 -(1 +I) ^( -A(5)))
8140 RETURN
8142 :
8144 REM OUTPUT HEADING SECTION
8146 HOME : HTAB 13: INVERSE : PRINT " TERM: ";A(5);" MONTHS ": NORMAL
8148 VTAB 2: PRINT "PRCNT";
8150 FOR K = A(1) -4 *A(2) TO A(1) STEP A(2):P$ = STR$( INT(K)):PL = 7: GOSUB 308: PRINT P$;: NEXT K
8152 GOSUB 400
8154 :
8156 REM MAIN PROGRAM
8158 J = A(3)
8160 P = J:PL = 5: GOSUB 302: PRINT P$;
8162 FOR K = A(1) -4 *A(2) TO A(1) STEP A(2)
8164 GOSUB 8136
8166 P = PMT:PL = 7: GOSUB 302: PRINT P$;
8168 NEXT K
8170 J = J -A(4)
8172 IF PEEK(37) <22 AND J >0 THEN 8160
8174 VTAB 24: INVERSE : PRINT " ANY KEY FOR MENU ";: NORMAL
8176 CALL -756
8178 GOTO 8102
8180 :
9000 REM AMORTIZATION SCHEDULE
9001 HOME : VTAB 5: INPUT "YEARLY INTEREST RATE % ";I:I = I/1200: INPUT "MONTHLY PAYMENT ";PMT: INPUT "INITIAL LOAN AMOUNT ";PV
9002 HOME :DP = 2:G$ = CHR$(7)
9003 PRINT TAB( 5);"PAID TO"; TAB( 15);"PAID"; TAB( 22);"REMAIN"; TAB( 33);"TOTAL"
9004 PRINT "NO"; TAB( 5);"PRINCIP"; TAB( 14);"TO INT"; TAB( 22);"BALANCE"; TAB( 32);"INTEREST": FOR DOT = 0 TO 39: PRINT ".";: NEXT DOT: POKE 34,3
9005 OB = PV:K = 1
9006 A = (1 +I) ^( -K)
9007 NB = (((A -1)/I) *PMT +PV)/A
9008 IF NB < = 0 THEN 9014
9009 PRIN = OB -NB:K$ = STR$(K):K$ = K$ +" ": PRINT LEFT$(K$,3);:P = PRIN:PL = 7: GOSUB 300: PRINT P$;
9010 IN = PMT -PRIN:P = IN:PL = 9: GOSUB 300: PRINT P$;:P = NB:PL = 10: GOSUB 300: PRINT P$;
9011 TIN = K *PMT -PV +NB:P = TIN: GOSUB 300: PRINT P$
9012 K = K +1:OB = NB
9013 IF PEEK(37) < >23 THEN 9006
9014 VTAB 24: INVERSE : PRINT " ESC TO EXIT OR ANY KEY TO CONTINUE ";: NORMAL
9015 POKE -16368,0: GET Z$: IF Z$ < > CHR$(27) THEN HOME : GOTO 9006
9016 POKE 34,0: GOTO 200